package 爬虫;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class 带条件的爬取 {
    public static void main(String[] args) {
        /*
            有如下文本，按要求爬取数据。
                Java自从95年问世以来，经历了很多版本，目前企业中用的最多的是Java8和Java11，
                因为这两个是长期支持版本，下一个长期支持版本是Java17，相信在未来不久Java17也会逐渐登上历史舞台


            需求1:爬取版本号为8，11.17的Java文本，但是只要Java，不显示版本号。
            需求2:爬取版本号为8，11，17的Java文本。正确爬取结果为:Java8 Java11 Java17 Java17
            需求3:爬取除了版本号为8，11.17的Java文本，
        */
        String s = "java自从95年问世以来，经历了很多版本，目前企业中用的最多的是JaVa8和JaVA11，" +
                "因为这两个是长期支持版本，下一个长期支持版本是JAVa17，相信在未来不久JavA17也会逐渐登上历史舞台";
        //需求1:爬取版本号为8，11.17的Java文本，但是只要Java，不显示版本号。
        //?可以理解为前面的数据Java
        //=表示在Java后面要要跟随的数据
        //但是在获取的时候，只获取前半部分（获取符合要求的前半部分java）
        String regex1 = "((?i)Java)(?=8|11|17)";
        Matcher m1 = Pattern.compile(regex1).matcher(s);
        while (m1.find()) {
            String s1 = m1.group();
            System.out.println(s1);
        }



        //需求2:爬取版本号为8，11，17的Java文本。正确爬取结果为:Java8 Java11 Java17 Java17
        String regex2 = "((?i)Java)(8|11|17)";
        //?可以理解为前面的数据Java
        //:表示在Java后面要要跟随的数据
        //但是在获取的时候，只获取整体（获取符合要求的整个要求的java格式）
        String regex3 = "((?i)Java)(?:8|11|17)";
        Matcher m2 = Pattern.compile(regex3).matcher(s);
        while (m2.find()) {
            String s1 = m2.group();
            System.out.println(s1);
        }



        //需求3:爬取除了版本号为8，11.17的Java文本，
        //!表示去除的意思（不要满足8|11|17的，只要不满足的，也就是单个java）
        String regex4 = "((?i)Java)(?!8|11|17)";
        Matcher m3 = Pattern.compile(regex4).matcher(s);
        while (m3.find()) {
            String s1 = m3.group();
            System.out.println(s1);
        }
    }
}
